
/**
 * 全局的工具类
 * <pre>
 * 作者:hugh zhuang
 * 邮箱:3378340995@qq.com
 * 日期:2018-07-02-下午3:29:34
 * 版权:广州流辰信息技术有限公司
 * </pre>
 *
 * 可以使用 this.$utils.xx
 *  如: 判断是否为空
 *   this.$utils.isEmpty()
 */
const wd = window

const utils = {

  /**
   * 判断是否为空
   * @param {*} val
   */
  isEmpty: (val) => {
    if (val instanceof Array) {
      if (val.length === 0) return true
    } else if (val instanceof Object) {
      if (JSON.stringify(val) === '{}') return true
    } else {
      if (val == null || val === undefined || val === '') return true
      return false
    }
    return false
  },

  /**
   * 判断是否不为空
   * @param {*} val
   */
  isNotEmpty: (val) => {
    return !utils.isEmpty(val)
  },
  /**
   * 随机id
   */
  guid: () => {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      const r = Math.random() * 16 | 0
      const v = c === 'x' ? r : (r & 0x3 | 0x8)
      return v.toString(16)
    })
  },
  /**
   * 创建新数据，避免对象引用
   * @param {*} obj
   * @param {*} defVal
   */
  newData(obj, defVal) {
    if (utils.isEmpty(obj)) { return defVal || obj }
    return JSON.parse(JSON.stringify(obj))
  },

  /**
   * 对于json字符串的转换
   * @param {*} data
   */
  parseData: (data) => {
    if (utils.isEmpty(data)) {
      return {}
    }
    var json = wd.eval('(' + data + ')')
    return json
  },
  evalData: (data) => {
    wd.eval(data)
  },
  toBoolean: (str, defaultValue = false) => {
    if (utils.isEmpty(str)) {
      return defaultValue
    }
    return ['True', 'Yes', 'true', '1', 1, 'yes', 'Y', 'y', 'T', 't', true].includes(str)
  },

  /**
   * 动态插入css
   */
  loadStyle: (url) => {
    const link = document.createElement('link')
    link.type = 'text/css'
    link.rel = 'stylesheet'
    link.href = url
    const head = document.getElementsByTagName('head')[0]
    head.appendChild(link)
  },

  format: (str, args) => {
    if (args.length < 1) {
      return str
    }

    var data = args // 如果模板参数是数组
    if (args.length === 1 && typeof (args) === 'object') {
      // 如果模板参数是对象
      data = args
    }
    for (var key in data) {
      var value = data[key]
      if (undefined !== value) {
        str = str.replace('{' + key + '}', value)
      }
    }
    return str
  },
  flatten: (ary, b, c) => {
    c = c || []
    if (ary) {
      for (var i = 0, e = ary.length; i < e; i++) {
        var f = ary[i]
        if (Array.isArray(f)) {
          utils.flatten(f, b, c)
        } else {
          b && !b(f) || c.push(f)
        }
      }
    }
    return c
  }

}

export default utils
